﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using RRTWSEntityDSD.Dominio;
using RRTWSNegocioDSD.Dao;
using RRTWSEntityDSD.Dao;
using System.ServiceModel.Web;
using System.Net;

namespace RRTWSEntityDSD.ServiceEntidad.WFCServiceREST
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "WCFEventoService" in code, svc and config file together.
    public class WCFEventoService : IWCFEventoService
    {
        private static EventoDAO eventoDAO = new EventoDAO();

        public EventoDeportivo crearEvento(EventoDeportivo eventoACrear)
        {

            string feIni = eventoACrear.fechaInicio;
            string feFin = eventoACrear.fechaFinEvent;
            string descripcion = eventoACrear.descripcion;
            string idContenidoWeb = eventoACrear.uuidContenido;
            int limiteEnt = eventoACrear.limiteEntradas;
            int estadio = eventoACrear.idEstadio;
            double precio = eventoACrear.precioEntrada;
            string uuidContenido = eventoACrear.uuidContenido;

            return eventoDAO.crear(feIni,
            feFin,
            descripcion,
            idContenidoWeb,
            limiteEnt,
            estadio,
            precio,
            uuidContenido);
        }


        public EventoDeportivo getEvento(string codigo)
        {
            int id = int.Parse(codigo);

            if (id == 0)
            {
                throw new NullReferenceException("valor vacio");
            }
            EventoDeportivo e = eventoDAO.getEvento(id);
            if (e == null)
            {
                throw new NullReferenceException("No existe evento deportivo");
            }
            return e;
        }


        public EventoDeportivo getEventoPorContenido(string idContenidoWeb)
        {
            return eventoDAO.getEvento(idContenidoWeb);
        }





        public EventoDeportivo modificarEvento(EventoDeportivo eventoAModificar)
        {
            
            int evento = eventoAModificar.idEvento;
            string feIni = eventoAModificar.fechaInicio;
            string feFin = eventoAModificar.fechaFinEvent;
            string descripcion = eventoAModificar.descripcion;
            string idContenidoWeb = eventoAModificar.uuidContenido;
            int limiteEnt = eventoAModificar.limiteEntradas;
            int estadio = eventoAModificar.idEstadio;
            double precio = eventoAModificar.precioEntrada;
            string uuidContenido = eventoAModificar.uuidContenido;

            return eventoDAO.update(evento, feIni,
             feFin,
             descripcion,
             idContenidoWeb,
             limiteEnt,
             estadio,
             precio,
             uuidContenido);
        }
        
        public List<EventoDeportivo> getListarUltimosEventos(string limite)
        {
            int _limite = int.Parse(limite);
            return eventoDAO.getListarUltimosEventos(_limite);
        }


        public List<EventoDeportivo> getListarEventos()
        {
            return eventoDAO.ListarTodos().ToList();
        }




        public int cantidadEntradasCompradasPorClientePorEvento(string cliente, string evento)
        {
            return eventoDAO.cantidadEntradasCompradasPorClientePorEvento(int.Parse(cliente), int.Parse(evento));
        }


        public EventoDeportivo getEventoxOperacion(string idOperacion)
        {
            int _idOperacion = int.Parse(idOperacion);

            return eventoDAO.getEventoxOperacion(_idOperacion);
        }
    }
}
